你真的理解C语言中的 “ 数组 ” 吗?(初阶篇) |
您所在的位置:网站首页 › 定义数组a[10]={0} › 你真的理解C语言中的 “ 数组 ” 吗?(初阶篇) |
⭐ 前言 本文将介绍C语言中数组; 通过数组我们可以更方便地存储和访问这些元素。 另外,数组也可以和指针相结合,组成数组指针或者指针数组。(这是重点放在后面单独出一篇笔记) 本章将带大家重点了解:一维数组和二维数组。 Let’s get it! 文章目录 1. 数组简介🎃 顺序存储🎃 存储方式🎃 长度和容量🎃 数组的索引 2. 一维数组的创建和初始化🌳 数组的初始化🟠 字符数组的初始化 🌳 一维数组在内存中的存储🌳 一维数组的使用一维数组的数组名是什么 3. 二维数组🌳 二维数组的创建🌳 二维数组的初始化🌳 二维数组在内存中的存储🌳 二维数组的使用 4. 数组名的含义🌳 冒泡排序函数的设计 5. 结语 1. 数组简介先来从整体上认识一下数组,然后再深入理解! 🎃 顺序存储顺序存储结构,是指用一段地址连续的存储单元来依次存储数据。 如图所示,每个蓝色方块都对应了数组中的一个数据: 数据有类型,例如:32位整型int、单精度浮点型float、双精度浮点型double、字符型char,64位整型long long、16位短整型short等等。 🎃 存储方式在编程语言中,用一维数组来实现顺序存储结构; 在C语言中,把第一个数据元素存储到下标为 0 的位置中,把第 2 个数据元素存储到下标为 1 的位置中,以此类推。 C语言中,数组的定义如下: int arr[7];我们也可以将数组元素进行初始化,如下: int arr[7] = {5, 2, 0, 1, 3, 1, 4};由于编译器能够通过后面的初始化列表知道到底有多少个数据元素,所以中括号中的数字可以省略,如下: int arr[] = {5, 2, 0, 1, 3, 1, 4};当然,我们还可以定义一个大数组,但是只初始化其中几个元素: int arr[15] = {5, 2, 0, 1, 3, 1, 4}; 🎃 长度和容量数组的长度指的是数组当前有多少个元素,数组的容量指的是数组最大能够存放多少个元素。 如果数组元素大于最大能存储的范围,在程序上是不允许的,可能会产生意想不到的问题,实现上是需要规避的。 如上图所示,数组的长度为 5,即红色部分;容量为 8,即红色 加 蓝色部分。 例如下面这个数组: int arr[8] = {9, 8, 7, 6, 5}; 🎃 数组的索引数组中的元素索引,我们可以采用[]运算符来完成,例如: int a[7] = {5, 2, 0, 1, 3, 1, 4}; int b = a[0]; // 5 int c = a[6]; // 4 int d = a[7]; // error这段代码中,a[0]表示的是数组的第一个元素,a[6]表示的数组的最后一个元素。 而a[7]则是非法的,原因是数组元素一个 7 个,而这个调用,索引到了第 8 个元素,如果程序这样调用,就可能引起位置的错误。 这种错误调用,我们一般称它为:数组下标越界。 以上简介出自英雄哥的《LeetCode零基础指南》 一维数组 接下来正式进入数组的学习! 2. 一维数组的创建和初始化数组的创建方式: type_t arr_name[const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式,用来指定数组的大小例如: int arr1[5]; char arr2[10]; float arr3[8]; double arr4[20];以上这种创建形式都符合数组的创建语法。 🐱🏍注:数组创建,[ ]中要给一个常量才可以,不能使用变量。 例如: int main() { int i = 20; int arr[i]; return 0; }运行结果: 数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。 如果实在想不到赋什么初值,可以在初始化的时候直接赋值为0; 代码示例: int main() { int arr1[5] = { 1,2,3,4,5 }; int arr2[5] = { 0 };//如果只传一个0,会将数组的内容全部初始化为0 char arr3[3] = { 'a',98, 'c' };//char变量直接存放数字,放的是数字所对应的ASCII码字符 char arr4[3] = { 0 };//将数组中的内容初始化为'\0',注意,这里不是字符0 return 0; }🐱👓我们通过调试看一看: 代码示例: int main() { int arr1[10] = { 1,2,3,4,5 }; char arr2[10] = { 'a',98, 'c' }; return 0; }调式结果: 数组的元素个数根据初始化的内容来确定。 📄代码示例: int main() { int arr1[] = { 1,2,3,4,5 }; char arr2[] = { 'a','b','c' }; char arr3[] = "abc"; return 0; }调试结果: 同理arr2和arr3也一样,但是arr2和arr3大小并不相同。 这就涉及到字符数组的初始化问题了。 🟠 字符数组的初始化当我们想要给一个字符数组初始化时,可以用{ ' ', ' '}这样的形式将每个字符单独存放; 也可以用" "的形式直接存放一个字符串。 这两种类型是有区别的: int main() { char arr1[] = { 'a','b','c' }; char arr2[] = "abc"; return 0; }调试结果: 但是存放字符串要比单独存放字符在结束时多存放一个\0,这就导致存放字符串的空间大小比直接存放字符多1 关于字符数组和字符串数组的区别可以看我之前写过的一篇博客:深入理解字符数组和字符串数组 🌳 一维数组在内存中的存储一维数组元素在内存中是连续存放的,随着数组下标的增长,地址由低到高变化; 我们通过 &(取地址符号) 来得到每个数组的地址 代码示例: int main() { int arr[10] = { 0 }; int i = 0; for (i = 0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |